/* //////////////////////////////////////////////////////////////////////
//
//               INTEL CORPORATION PROPRIETARY INFORMATION
//  This software is supplied under the terms of a license agreement or
//  nondisclosure agreement with Intel Corporation and may not be copied
//  or disclosed except in accordance with the terms of that agreement.
//        Copyright (c) 2005-2007 Intel Corporation. All Rights Reserved.
//
*/

#ifndef __H261DECODER_H__
#define __H261DECODER_H__

#include "ippdefs.h"
#include "ipps.h"
#include "ippi.h"
#include "ippvc.h"

#if defined(__INTEL_COMPILER)
#define __ALIGN16(type, name, size) \
    __declspec (align(16)) type name[size]
#else
#if defined(_WIN64) || defined(WIN64) || defined(LINUX64)
#define __ALIGN16(type, name, size) \
    Ipp8u _a16_##name[(size)*sizeof(type)+15]; type *name = (type*)(((Ipp64s)(_a16_##name) + 15) & ~15)
#else
#define __ALIGN16(type, name, size) \
    Ipp8u _a16_##name[(size)*sizeof(type)+15]; type *name = (type*)(((Ipp32s)(_a16_##name) + 15) & ~15)
#endif
#endif

#define _SWAP(type, a, b) \
{ \
  type tmp = a; \
  a = b; \
  b = tmp; \
}


typedef struct _decoder_state
{
  Ipp32s picture_format;
  Ipp32s picture_width;
  Ipp32s picture_height;
  Ipp8u  tr;
  Ipp32s numgob;
  Ipp64s time;
  Ipp8u* buffer;
  Ipp8u* bufptr;
  Ipp32s buflen;
  Ipp32s bitoff;
  Ipp8u* curPic[3];
  Ipp8u* refPic[3];
  Ipp32s picType;
  Ipp32u mid_cur;
  Ipp32u mid_ref;
} H261DEC_STATE;

Ipp32s initDecoder(H261DEC_STATE* pstate);
//void freeDecoder(H261DEC_STATE* pstate);
Ipp32s getPicture(H261DEC_STATE* pstate);
Ipp32s getPictureHeader(H261DEC_STATE* pstate);

#define ErrMsg(msg)

#endif // __H261DECODER_H__
